perm filename FIX[AP,SYS] blob
sn#033715 filedate 1973-04-07 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00004 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 PROGRAM TO ALLOW MANUAL CHANGING OF THE DATA IN A FILE.
C00003 00003 Main program.
C00005 00004
C00008 ENDMK
C⊗;
;PROGRAM TO ALLOW MANUAL CHANGING OF THE DATA IN A FILE.
TITLE FIX
EXTERNAL DDT,JOBDDT
F←←0 ;FLAGS
CH←4 ;INPUT CHARACTER
BP←5 ;BYTE POINTER
I←6 ;COUNTER
A←7
PPN←10 ;FILE PPN
C←11
DSK17: 17
SIXBIT /DSK/
0
MAXLEN←10000 ;maximum allowable size of file
FILEF: BLOCK 4 ;lookup/enter block for file
FILE: BLOCK MAXLEN ;array for holding entire file in core
CMD: IOWD 1,FILE ;dump mode command for reading/writing the file
0
CR←15 LF←12
;flag bits in AC F
GOTEXT←1
MOD←2
GOTP←4
GOTPN←10
;Main program.
REESET: CLRBFI
OUTSTR [ASCIZ /
Bad filename!
/]
FIX: OUTSTR [ASCIZ /
TYPE FILENAME: /]
MOVEI I,6 ;limit filename to 6 chars
MOVE BP,[POINT 6,FILEF]
SETZB F,FILEF
SETZB PPN,FILEF+1
INCHWL CH
CAIN CH,"."
JRST REESET
GETNAM: TRZ CH,40 ;convert char to sixbit
TRZE CH,100
TRO CH,40
SOJL I,.+2
IDPB CH,BP
TEST: INCHWL CH
CAIE CH,"]" ;END OF P,PN?
CAIN CH,CR ;END OF INPUT?
JRST ENDNAM ;YES TO ONE OF THESE
CAIN CH,"[" ;PROJECT NEXT?
JRST GETP ;YES
CAIN CH,"," ;PROGRAMMER NAME NEXT?
JRST GETPN ;YES
CAIE CH,"." ;EXTENSION NEXT?
JRST GETNAM ;NO
GETEXT: TLOE F,GOTEXT ;MAKE SURE WE DONT ALREADY HAVE AN EXTENSION
JRST REESET
MOVE BP,[POINT 6,FILEF+1]
GOON: MOVEI I,3
JRST TEST
GETP: TLOE F,GOTP ;MAKE SURE WE DONT ALREADY HAVE A PROJECT
JRST REESET
MOVE BP,[POINT 6,PPN] ;PUT PROJECT INTO LEFT HALF OF PPN
JRST GOON
GETPN: TLON F,GOTPN ;MAKE SURE WE DONT ALREADY HAVE A PROGRAMMER NAME
TLNN F,GOTP ;MAKE SURE WE DO HAVE A PROJECT
JRST REESET
SETZ C,
MOVE BP,[POINT 6,C,17] ;PUT PROGRAMMER NAME INTO RIGHT HALF OF C
JUMPLE I,GOON
LSH PPN,-6 ;RIGHT-JUSTIFY PROJECT IN LEFT HALF OF PPN
SOJG I,.-1
JRST GOON
ENDNAM: CLRBFI ;FORGET INPUT AFTER "]" OR CR
TLNN F,GOTP ;PROJECT SPECIFIED?
JRST END1 ;NO
TLNN F,GOTPN ;PROGRAMMER NAME?
JRST END2 ;NO
JUMPLE I,END4 ;YES. ALREADY RIGHT JUSTIFIED?
LSH C,-6 ;NO. DO IT NOW.
SOJG I,.-1
JRST END4
END2: JUMPLE I,END5 ;PROJECT RIGHT JUSTIFIED?
LSH PPN,-6 ;NO. DO IT NOW.
SOJG I,.-1
END5: SETZ C, ;GET OWN DISK PPN
DSKPPN C,
END4: HRR PPN,C ;COMBINE P & PN IN PPN
END1: OPEN 1,DSK17
HALT .
MOVEM PPN,FILEF+3 ;PUT PPN IN LOOKUP BLOCK
LOOKUP 1,FILEF
JRST [OUTSTR [ASCIZ\
LOOKUP FAILED!
\]
JRST FIX]
HLRE A,FILEF+3
JUMPE A,[OUTSTR [ASCIZ\
EMPTY FILE!
\]
JRST END9]
CAMGE A,[-MAXLEN]
JRST [RELEAS 1,
OUTSTR [ASCIZ /
File is too big for FIX.
/]
EXIT]
HRLM A,CMD
IN 1,CMD
JRST .+2
HALT .
TRNE A,1 ;WORD COUNT EVEN?
SUBI A,1 ;NO. MAKE IT EVEN
HRLM A,CMD
END9: RELEAS 1,
OUTSTR [ASCIZ /Modify the file? /]
TLZ F,MOD
INCHRW CH
CAIN CH,CR ;CR?
INCHRW CH ;YES. READ THE LF
CAIE CH,"Y"
CAIN CH,"y"
TLOA F,MOD
JRST NOMOD
OPEN 1,DSK17
HALT .
HLLZS FILEF+1
SETZM FILEF+2
MOVEM PPN,FILEF+3 ;PUT PPN IN ENTER BLOCK
ENTER 1,FILEF
JRST [OUTSTR [ASCIZ\
ENTER FAILED!
\]
TLZ F,MOD
JRST NOMOD]
NOMOD: OUTSTR [ASCIZ /
File read in.
/]
JRST @JOBDDT
WRITE: TLNN F,MOD
JRST [OUTSTR [ASCIZ /
You said no modification!
/]
CALLI 1,12
JRST FIX]
OUT 1,CMD
JRST .+2
HALT .
RELEAS 1,
RESET
OUTSTR [ASCIZ /
New file written.
/]
CALLI 12 ;EXIT
END FIX